package io.renren.modules.biz.service.impl;

import org.apache.http.HttpException;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.Query;

import io.renren.modules.biz.dao.BizKlineDao;
import io.renren.modules.biz.entity.BizKlineEntity;
import io.renren.modules.biz.service.BizKlineService;
import io.renren.modules.biz.service.IMarketRestApi;

@Service("bizKlineService")
public class BizKlineServiceImpl extends ServiceImpl<BizKlineDao, BizKlineEntity> implements BizKlineService {

	@Autowired
	private BizKlineDao bizKlineDao;

	@Autowired
	private IMarketRestApi marketRestApi;

	@Override
	public PageUtils queryPage(Map<String, Object> params) {
		Page<BizKlineEntity> page = this.selectPage(new Query<BizKlineEntity>(params).getPage(),
				new EntityWrapper<BizKlineEntity>());
		return new PageUtils(page);
	}

	@Override
	public void insertBizKline(String symbol,String period,Integer size) {
		try {
			Date curTime = new Date();
			String ret = marketRestApi.kline(symbol, period, size.toString());
			JSONObject jsonObject = new JSONObject(ret);
			if("ok".equals(jsonObject.getString("status"))){
				JSONArray jsonArray = jsonObject.getJSONArray("data");
				for (int i = 0; i < jsonArray.length(); i++) {
					JSONObject object = jsonArray.getJSONObject(i);
					BizKlineEntity bizKlineEntity = new BizKlineEntity();
					bizKlineEntity.setAmount(new BigDecimal(object.get("amount").toString()));
					bizKlineEntity.setClose(new BigDecimal(object.get("close").toString()));
					bizKlineEntity.setCount(object.getInt("count"));
					bizKlineEntity.setCreateTime(curTime);
					bizKlineEntity.setHigh(new BigDecimal(object.get("high").toString()));
					bizKlineEntity.setKlineId(object.getLong(("id").toString()));
					bizKlineEntity.setLow(new BigDecimal(object.get("low").toString()));
					bizKlineEntity.setOpen(new BigDecimal(object.get("open").toString()));
					bizKlineEntity.setSymbol(symbol);
					bizKlineEntity.setUpdateTime(curTime);
					bizKlineEntity.setVol(new BigDecimal(object.get("vol").toString()));
					bizKlineDao.insert(bizKlineEntity);
				}
			}
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}
